package ScalaStudy.chapter08

object Test06_PartialFunction {
  def main(args: Array[String]): Unit = {


    //////////////////////////////////////////////////////////////////////////////////////////
    //////////////////////////////////////////  偏函数  ////////////////////////////////////////
    ///////////////////////////////////////////////////////////////////////////////////////////


    val list: List[(String, Int)] = List(("a", 12), ("b", 35), ("c", 27), ("a", 13))

    println("============  1、map转换，仙女key不变，value2倍  ============")

    val newList = list.map( tuple => (tuple._1, tuple._2 * 2))
    println(newList)

    println("============  2、用模式匹配，对元组元素赋值，实现功能  ============")

    val newList2 = list.map(
      tuple => {
        tuple match {
          case (word, count) => (word, count * 2)
        }
      }
    )

    println(newList2)

    println("============  3、省略lambda表达式的写法，进行简化  ============")


    //*******这就是偏函数************

    val newList3 = list.map {
          case (word, count) => (word, count * 2)
      }

    println(newList3)

    println("============  4、偏函数的应用，求绝对值  ============")

    //对输入数据分为不同的情形：正、负、0

        //  函数名          偏函数   参数类型 返回值类型   函数体
        //   ||             ||       ||    ||         ||
    val positiveAbs: PartialFunction[Int, Int] = {
      case x if x > 0 => x
    }

    val negativeAbs: PartialFunction[Int, Int] = {
      case x if x < 0 => -x
    }

    val zeroAbs: PartialFunction[Int, Int] = {
      case 0 => 0
    }

    //把上面的偏函数拼接成一个完整的函数

          //输出类型  //输出类型      //下面是拼接成完整的函数                      //传入参数
    def abs (x: Int) : Int = (positiveAbs orElse negativeAbs orElse zeroAbs) (x)

    println(abs(-67))
    println(abs(35))
    println(abs(0))




  }
}
